package ar.com.arkios.kfcon4d.dao;

import ar.com.arkios.kfcon4d.util.EstructuraUtil;
import ar.com.arkios.kfcon4d.util.RegisterBuilder;
import ar.com.arkios.kfconmodelo.modelo.Envase;
import ar.com.arkios.kfconmodelo.modelo.Especie;
import ar.com.arkios.j4d.opDataArray;
import java.util.List;
import org.apache.log4j.Logger;

/**
 * <p>
 * 
 * </p>
 */
public class EnvaseDAO extends GenericDAO<Envase> {
    
    private static final Logger miLogger = Logger.getLogger(EnvaseDAO.class);
    
    /** Nombre de la tabla Envases */
    private static final String ENVASES = "Envases";
    
    /** Nombre de la tabla EnvasesAtributos */
    private static final String ENVASES_ATTR = "EnvasesAtributos";
    
    // Columnas de la tabla Envases
    private static final String ENVASES_COD = "Cod";
    private static final String ENVASES_DESCRIPCION = "Descripcion";
    private static final String ENVASES_DESCRIPCION_ETIQ = "DescripcionEtiq";
    private static final String ENVASES_TIPO = "Tipo";
    
    // Columnas de la tabla EnvasesAtributos
    private static final String ENVASES_ATTR_COD = "Envase";
    private static final String ENVASES_ATTR_ENTE = "Ente";
    private static final String ENVASES_ATTR_AT1 = "Atributo1";
    
    /** Nombres de las columnas a ser utilizadas de la tabla Envases. */
    private static final String[] ENVASES_COLUMNAS = {ENVASES_COD, ENVASES_DESCRIPCION, ENVASES_DESCRIPCION_ETIQ, ENVASES_TIPO};
    
    /** Nombres de las columnas a ser utilizada como PK de Envases. */
    private static final String[] ENVASES_PK = {ENVASES_COD};
    
    /** Nombres de las columnas a ser utilizadas de la tabla EnvasesAtributos. */
    private static final String[] ENVASES_ATTR_COLUMNAS = {ENVASES_ATTR_COD, ENVASES_ATTR_ENTE, ENVASES_ATTR_AT1};

    /** Nombres de las columnas a ser utilizada como PK de EnvasesAtributos. */
    private static final String[] ENVASES_ATTR_PK = {ENVASES_ATTR_COD};
    

    @Override
    protected String getEntidadTableName() {
        return ENVASES;
    }

    @Override
    protected String getEntidadAtributoTableName() {
        return ENVASES_ATTR;
    }

    @Override
    protected String getPKProperty() {
        return "miCodigo";
    }

    @Override
    protected opDataArray[] mapListEntidadTo4D(List<Envase> laLista) {
        opDataArray[] losDatosEnvases = new opDataArray[getMiEntidadFields().mSize];

        for (int i = 0; i < losDatosEnvases.length; i++) {
            losDatosEnvases[i] = new opDataArray(laLista.size());
        }

        int i = 0;
        for (Envase envase : laLista) {            
            RegisterBuilder especiesRegisterBuilder = new RegisterBuilder(getMiEntidadFields());
            especiesRegisterBuilder.setData(ENVASES_COD, envase.getMiCodigo());
            especiesRegisterBuilder.setData(ENVASES_DESCRIPCION, envase.getMiDescripcion());
            especiesRegisterBuilder.setData(ENVASES_DESCRIPCION_ETIQ, envase.getMiDescripcion2());
            especiesRegisterBuilder.setData(ENVASES_TIPO, envase.getMiTipoEnvase());
            
            opDataArray dataAux = especiesRegisterBuilder.getDataArray();
            for (int j = 0; j < getMiEntidadFields().mSize; j++) {
               losDatosEnvases[j].mDataArray[i] = dataAux.mDataArray[j];
            }
            i += 1;
        }
        return losDatosEnvases;
    }

    @Override
    protected opDataArray[] mapListEntidadAtributosTo4D(List<Envase> laLista) {
        opDataArray[] losDatosEnvasesAtributos = new opDataArray[getMiEntidadAtributosFields().mSize];

        for (int i = 0; i < losDatosEnvasesAtributos.length; i++) {
            losDatosEnvasesAtributos[i] = new opDataArray(laLista.size());
        }

        int i = 0;
        for (Envase envase : laLista) {            
            RegisterBuilder envaseAtributosRegisterBuilder = new RegisterBuilder(getMiEntidadAtributosFields());
            envaseAtributosRegisterBuilder.setData(ENVASES_ATTR_COD, envase.getMiCodigo());
            envaseAtributosRegisterBuilder.setData(ENVASES_ATTR_ENTE, EstructuraUtil.SAP);
            envaseAtributosRegisterBuilder.setData(ENVASES_ATTR_AT1, envase.getMiEspecieCod());
            
            opDataArray dataAux = envaseAtributosRegisterBuilder.getDataArray();
            for (int j = 0; j < getMiEntidadAtributosFields().mSize; j++) {
               losDatosEnvasesAtributos[j].mDataArray[i] = dataAux.mDataArray[j];
            }
            i += 1;
        }
        return losDatosEnvasesAtributos;
    }
    
    @Override
    protected String[] getEntidadFieldsNames(){
        return ENVASES_COLUMNAS;
    }
    
    @Override
    protected String[] getEntidadAtributosFieldsNames() {
        return ENVASES_ATTR_COLUMNAS;
    }
    
    @Override
    protected String[] getEntidadPKFieldsNames(){
        return ENVASES_PK;
    }
    
    @Override
    protected String[] getEntidadAtributosPKFieldsNames() {
        return ENVASES_ATTR_PK;
    }
}